package com.xshang.tenant;

import org.springframework.util.StringUtils;

/**
 * 当前线程中的租户数据源上下文
 */
public class TenantDataSourceContext {

    private static final ThreadLocal<String> DATA_SOURCE_NAME_HOLDER = new ThreadLocal<>();

    /**
     * 缺省租户数据源名称
     */
    public static final String DEFAULT_TENANT_DATA_SOURCE = "defaultTenantDataSource";

    /**
     * 获取当前请求中的租户数据源
     *
     * @return 租户数据源名称
     */
    public static String get() {
        String dataSourceName = DATA_SOURCE_NAME_HOLDER.get();
        if (!StringUtils.hasText(dataSourceName)) {
            dataSourceName = DEFAULT_TENANT_DATA_SOURCE;
        }
        return dataSourceName;
    }

    /**
     * 设置当前请求将使用的租户数据源
     *
     * @param dataSourceName 数据源名称
     */
    public static void set(String dataSourceName) {
        DATA_SOURCE_NAME_HOLDER.set(dataSourceName);
    }

    /**
     * 请求结束后，移除本地线程中的租户数据源名称
     */
    public static void clear() {
        DATA_SOURCE_NAME_HOLDER.remove();
    }
}

